/*
 * CBufferStream.h
 *
 *  Created on: 07.03.2012
 *      Author: Caffeine
 */

#ifndef CBUFFERSTREAM_H_
#define CBUFFERSTREAM_H_
#include <irrlicht.h>
#include "memory/IMemoryStream.h"
namespace irr{
namespace memory{



class CBufferStream:public IMemoryStream{
private:
	irr::u32 allocated;
	irr::u32 uses;
	void*data;
	bool free_on_destroy;
	irr::u32 position;
	void checkSize(irr::u32 needSize);
public:
	virtual irr::u32 getSize();
	virtual void setPosition(irr::u32 p);
	virtual irr::u32 getPosition();
	virtual void write(void*buffer,irr::u32 size);
	virtual void read(void*buffer,irr::u32 size);
	/**
	 * Возвращяет указатель на данные потока
	 *
	 * @return указатель на данные
	 */
	virtual void*getBuffer();
	virtual void setMemoryData(void*begin=0,irr::u32 size=0,bool _free_on_destroy=true);
	virtual void clear();

	/**
	 * Конструктор
	 */
	CBufferStream();

	/**
	 * Деструктор
	 */
	virtual ~CBufferStream();
};
}//namespace memory
}//namespace irr
#endif /* CBUFFERSTREAM_H_ */
